/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package evabot.bot;

//package alicebot.bot;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;

/**
 * Classe responsÃ¡vel pela gravaÃ§Ã£o de Log do diÃ¡logo.
 *
 * @author Alexandre Sales, Danielle Chaves, Maria Isabel Farias
 *
 */
class EvaBotLog {

	private boolean isLogging = true;
	public final String lineSeparator = System.getProperty("line.separator");
	public final String fileSeparator = System.getProperty("file.separator");
	private StringBuilder log;
	private String start;
	public File file;
	private static EvaBotLog instance = null;

	/**
	 * Construtor da classe.
	 */
	private EvaBotLog() {
		this.log = new StringBuilder();
		this.start = getTime();
		this.file = new File("Log"+fileSeparator+start+".log");
	}

	/**
	 * ResponsÃ¡vel pela instanciaÃ§Ã£o da classe.
	 *
	 * @return Uma nova instÃ¢ncia da classe.
	 */
	public static EvaBotLog getInstance() {
		if(instance == null) {
			return new EvaBotLog();
		}
		return instance;
	}

	/**
	 * Seta a gravaÃ§Ã£o do log.
	 *
	 * @param isLogging
	 * 			true, caso queira iniciar a gravaÃ§Ã£o do log do diÃ¡logo.
	 * 			false, caso contrÃ¡rio.
	 */
	public void setLog(boolean isLogging) {
		this.isLogging = isLogging;
	}

	/**
	 * Verifica se o log estÃ¡ sendo gravado.
	 *
	 * @return  Retorna true, caso verdadeiro.
	 * 			Retorna false, caso contrÃ¡rio.
	 */
	public boolean isLogging() {
		return this.isLogging;
	}

	/**
	 * Salva uma determinada frase no log em arquivo.
	 *
	 * @param phrase
	 * 			A frase desejada.
	 * @return  Retorna true, caso a frase tenha sido gravada com sucesso.
	 * 			Retorna false, caso contrÃ¡rio.
	 */
	public boolean saveLog(String phrase) {
		if(isLogging) {
			this.log.append(getTime()+" "+phrase+lineSeparator);
			try {
				FileWriter fw = new FileWriter(file);
				fw.write(this.log.toString());
				fw.flush();
				fw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			return true;
		}
		return false;
	}

	/**
	 * Recupera o horÃ¡rio em que o Log estÃ¡ sendo gravado.
	 *
	 * @return O horÃ¡rio de gravaÃ§Ã£o do log.
	 */
	private String getTime() {
		String time = new Date(System.currentTimeMillis()).toString();
		time = time.replace(":", "-");
		return time;
	}
}